iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0

模組

使用時機: 當想要有一些特性又不想要改變原本的物件方法
我們可以把模組想成是擁有許多方法和常數的工具箱。
模組其實和類別的概念很相似,但模組不能建構實例(instance),而且也不會有子類別(subclass),它只是用來儲存東西的。但在模組中不太會包含變數(variable),因為變數可能會變動。但如果是常數的話,因為不太會變動因此我們可以把一些固定的常數存在模組中。

  • 模組跟類別的差異
    https://ithelp.ithome.com.tw/upload/images/20231010/20162648cg4HeU9D8Z.png

建立模組

透過關鍵字 module 來建立模組,命名規則與 class 相同,使用駝峰大寫

module Flyable  #模組
	def fly
		puts "I believe I can fly!"
	end
end

class Cat
	include Flyable  #引入模組
end

kitty = Cat.new
kitty.fly

引用模組到類別中

如果我們想要把 module 引用到 class 中時,我們可以使用關鍵字 include 或 extend

  1. include : 在實例中引用module 的方法
  2. extend  : 在類別本身中引用module 的方法。

1. include

  • include 用於將模組的方法添加到類別的實例方法中。
  • 這意味著模組中的方法可以在該類的實例上調用。
  • include 通常用於將共享的功能添加到多個類中,實現代碼重用。
module Greeting
  def say_hello
    puts "Hello!"
  end
end

class Person
  include Greeting
end

person = Person.new
person.say_hello # 調用模組中的方法

2. extend

  • extend 用於將模組的方法添加到類的類方法(類方法也稱為單例方法)中。
  • 這意味著模組中的方法可以在該類的類本身上調用,而不是實例。
module Logging
  def log(message)
    puts "Log: #{message}"
  end
end

class MyClass
  extend Logging
end

MyClass.log("This is a log message") # 調用模組中的方法

參考資料:
https://pjchender.dev/ruby-on-rails/ruby-object/
https://railsbook.tw/chapters/08-ruby-basic-4


上一篇
[Day 25] Ruby: 物件和類別
下一篇
[Day 27] Ruby: 封裝、繼承、多型
系列文
30天從零到有,帶你進入程式的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言